package com.bjbn.util;

import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Value;

/**
 * 基于Hutool的Token缓存工具类
 * 特点：
 * 1. Token默认110分钟过期
 * 3. 支持定时清理过期条目
 */
@Component
public class HutoolTokenCacheUtil {

    // Hutool定时缓存实例
    private final TimedCache<String, String> tokenCache;

    public HutoolTokenCacheUtil(@Value("${token.cache.timeout:10}") long timeoutMinutes,
                                @Value("${token.cache.interval:5}") long pruneIntervalMinutes) {
        // 创建定时缓存，默认110分钟过期
        this.tokenCache = CacheUtil.newTimedCache(TimeUnit.MINUTES.toMillis(timeoutMinutes));

        // 启动定时任务，每5分钟清理一次过期条目
        this.tokenCache.schedulePrune(TimeUnit.MINUTES.toMillis(pruneIntervalMinutes));
    }

    /**
     * 添加token到缓存
     *
     * @param key   用户唯一标识
     * @param token token值
     */
    public void putToken(String key, String token) {
        tokenCache.put(key, token);
    }

    /**
     * 从缓存中获取token并刷新过期时间
     *
     * @param key 用户唯一标识
     * @return token值，如果不存在或已过期则返回null
     */
    public String getToken(String key) {
        return tokenCache.get(key);
    }

    /**
     * 从缓存中移除token
     *
     * @param key 用户唯一标识
     */
    public void removeToken(String key) {
        tokenCache.remove(key);
    }

    /**
     * 检查token是否存在(不刷新过期时间)
     *
     * @param key 用户唯一标识
     * @return 是否存在
     */
    public boolean containsToken(String key) {
        return tokenCache.containsKey(key);
    }

    /**
     * 清空所有token缓存
     */
    public void clearAll() {
        tokenCache.clear();
    }

}